package com.atguigu.tingshu.user.service;

import com.atguigu.tingshu.common.util.AuthContextHolder;
import com.atguigu.tingshu.model.user.UserInfo;
import com.atguigu.tingshu.model.user.VipServiceConfig;
import com.atguigu.tingshu.vo.user.UserCollectVo;
import com.atguigu.tingshu.vo.user.UserInfoVo;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.Map;

public interface UserInfoService extends IService<UserInfo> {
    /**
     * 微信登录
     * @param code 微信登录成功返回的code
     * @return 用户信息
     */
    Map<String, Object> wxLogin(String code);

    /**
     * 刷新token
     * @return token
     */
    Map<String, Object> refresh();

    /**
     * 根据用户id查询用户信息
     * @param userId 用户id
     * @return 用户信息
     */
    UserInfoVo getUserInfo(Long userId);

    /**
     * 修改用户信息
     * @param userInfoVo 用户信息
     */
    void updateUser(UserInfoVo userInfoVo);

    /**
     * 获取用户已购买专辑的音轨列表
     * @param albumId 专辑id
     * @param userId 用户id
     * @return 音轨列表
     */
    Map<Long, String> getUserPaidAlbumTrackList(Long albumId, Long userId);

    /**
     * 判断用户是否购买了专辑
     * @param userId 用户id
     * @param albumId 专辑id
     * @return true：已购买，false：未购买
     */
    Boolean getUserPaidAlbum(Long userId, Long albumId);

    /**
     * 收藏与取消收藏
     * @param trackId 音轨id
     * @return true：收藏，false：取消收藏
     */
    Boolean collect(Long trackId);

    /**
     * 判断用户是否收藏了音轨
     * @param trackId 音轨id
     * @return true：已收藏，false：未收藏
     */
    Boolean isCollect(Long trackId);

    /**
     * 用户收藏列表分页
     * @param page 分页对象
     * @param userId 用户id
     * @return 用户收藏列表分页
     */
    IPage<UserCollectVo> findUserCollectPage(IPage<UserCollectVo> page, Long userId);

    /**
     * 判断用户是否订阅了专辑
     * @param albumId 专辑id
     * @return true：已订阅，false：未订阅
     */
    Boolean isSubscribe(Long albumId);

    /**
     * 获取vip服务对应服务配置
     * @param itemId vip服务id
     * @return vip服务配置
     */
    VipServiceConfig getAllVipConfig(Long itemId);
}
